'use strict';
var t = require('fs'),
    r = require('path');
function e(t) {
    return t && 'object' == typeof t && 'default' in t ? t : { default: t };
}
var n = e(t),
    o = e(r),
    i =
        'undefined' != typeof globalThis
            ? globalThis
            : 'undefined' != typeof window
            ? window
            : 'undefined' != typeof global
            ? global
            : 'undefined' != typeof self
            ? self
            : {};
var u = (function (t) {
    var r = { exports: {} };
    return t(r, r.exports), r.exports;
})(function (t, r) {
    var e = '__lodash_hash_undefined__',
        n = 9007199254740991,
        o = '[object Arguments]',
        u = '[object Function]',
        c = '[object Object]',
        a = /^\[object .+?Constructor\]$/,
        f = /^(?:0|[1-9]\d*)$/,
        s = {};
    (s['[object Float32Array]'] =
        s['[object Float64Array]'] =
        s['[object Int8Array]'] =
        s['[object Int16Array]'] =
        s['[object Int32Array]'] =
        s['[object Uint8Array]'] =
        s['[object Uint8ClampedArray]'] =
        s['[object Uint16Array]'] =
        s['[object Uint32Array]'] =
            !0),
        (s[o] =
            s['[object Array]'] =
            s['[object ArrayBuffer]'] =
            s['[object Boolean]'] =
            s['[object DataView]'] =
            s['[object Date]'] =
            s['[object Error]'] =
            s[u] =
            s['[object Map]'] =
            s['[object Number]'] =
            s[c] =
            s['[object RegExp]'] =
            s['[object Set]'] =
            s['[object String]'] =
            s['[object WeakMap]'] =
                !1);
    var l = 'object' == typeof i && i && i.Object === Object && i,
        h = 'object' == typeof self && self && self.Object === Object && self,
        p = l || h || Function('return this')(),
        _ = r && !r.nodeType && r,
        v = _ && t && !t.nodeType && t,
        d = v && v.exports === _,
        y = d && l.process,
        g = (function () {
            try {
                var t = v && v.require && v.require('util').types;
                return t || (y && y.binding && y.binding('util'));
            } catch (t) {}
        })(),
        b = g && g.isTypedArray;
    function j(t, r, e) {
        switch (e.length) {
            case 0:
                return t.call(r);
            case 1:
                return t.call(r, e[0]);
            case 2:
                return t.call(r, e[0], e[1]);
            case 3:
                return t.call(r, e[0], e[1], e[2]);
        }
        return t.apply(r, e);
    }
    var w,
        O,
        m,
        A = Array.prototype,
        z = Function.prototype,
        M = Object.prototype,
        x = p['__core-js_shared__'],
        C = z.toString,
        F = M.hasOwnProperty,
        U = (w = /[^.]+$/.exec((x && x.keys && x.keys.IE_PROTO) || '')) ? 'Symbol(src)_1.' + w : '',
        S = M.toString,
        I = C.call(Object),
        P = RegExp(
            '^' +
                C.call(F)
                    .replace(/[\\^$.*+?()[\]{}|]/g, '\\$&')
                    .replace(/hasOwnProperty|(function).*?(?=\\\()| for .+?(?=\\\])/g, '$1.*?') +
                '$'
        ),
        T = d ? p.Buffer : void 0,
        q = p.Symbol,
        E = p.Uint8Array,
        $ = T ? T.allocUnsafe : void 0,
        D =
            ((O = Object.getPrototypeOf),
            (m = Object),
            function (t) {
                return O(m(t));
            }),
        k = Object.create,
        B = M.propertyIsEnumerable,
        N = A.splice,
        L = q ? q.toStringTag : void 0,
        R = (function () {
            try {
                var t = vt(Object, 'defineProperty');
                return t({}, '', {}), t;
            } catch (t) {}
        })(),
        G = T ? T.isBuffer : void 0,
        V = Math.max,
        W = Date.now,
        H = vt(p, 'Map'),
        J = vt(Object, 'create'),
        K = (function () {
            function t() {}
            return function (r) {
                if (!xt(r)) return {};
                if (k) return k(r);
                t.prototype = r;
                var e = new t();
                return (t.prototype = void 0), e;
            };
        })();
    function Q(t) {
        var r = -1,
            e = null == t ? 0 : t.length;
        for (this.clear(); ++r < e; ) {
            var n = t[r];
            this.set(n[0], n[1]);
        }
    }
    function X(t) {
        var r = -1,
            e = null == t ? 0 : t.length;
        for (this.clear(); ++r < e; ) {
            var n = t[r];
            this.set(n[0], n[1]);
        }
    }
    function Y(t) {
        var r = -1,
            e = null == t ? 0 : t.length;
        for (this.clear(); ++r < e; ) {
            var n = t[r];
            this.set(n[0], n[1]);
        }
    }
    function Z(t) {
        var r = (this.__data__ = new X(t));
        this.size = r.size;
    }
    function tt(t, r) {
        var e = Ot(t),
            n = !e && wt(t),
            o = !e && !n && At(t),
            i = !e && !n && !o && Ft(t),
            u = e || n || o || i,
            c = u
                ? (function (t, r) {
                      for (var e = -1, n = Array(t); ++e < t; ) n[e] = r(e);
                      return n;
                  })(t.length, String)
                : [],
            a = c.length;
        for (var f in t)
            (!r && !F.call(t, f)) ||
                (u &&
                    ('length' == f ||
                        (o && ('offset' == f || 'parent' == f)) ||
                        (i && ('buffer' == f || 'byteLength' == f || 'byteOffset' == f)) ||
                        dt(f, a))) ||
                c.push(f);
        return c;
    }
    function rt(t, r, e) {
        ((void 0 !== e && !jt(t[r], e)) || (void 0 === e && !(r in t))) && ot(t, r, e);
    }
    function et(t, r, e) {
        var n = t[r];
        (F.call(t, r) && jt(n, e) && (void 0 !== e || r in t)) || ot(t, r, e);
    }
    function nt(t, r) {
        for (var e = t.length; e--; ) if (jt(t[e][0], r)) return e;
        return -1;
    }
    function ot(t, r, e) {
        '__proto__' == r && R ? R(t, r, { configurable: !0, enumerable: !0, value: e, writable: !0 }) : (t[r] = e);
    }
    (Q.prototype.clear = function () {
        (this.__data__ = J ? J(null) : {}), (this.size = 0);
    }),
        (Q.prototype.delete = function (t) {
            var r = this.has(t) && delete this.__data__[t];
            return (this.size -= r ? 1 : 0), r;
        }),
        (Q.prototype.get = function (t) {
            var r = this.__data__;
            if (J) {
                var n = r[t];
                return n === e ? void 0 : n;
            }
            return F.call(r, t) ? r[t] : void 0;
        }),
        (Q.prototype.has = function (t) {
            var r = this.__data__;
            return J ? void 0 !== r[t] : F.call(r, t);
        }),
        (Q.prototype.set = function (t, r) {
            var n = this.__data__;
            return (this.size += this.has(t) ? 0 : 1), (n[t] = J && void 0 === r ? e : r), this;
        }),
        (X.prototype.clear = function () {
            (this.__data__ = []), (this.size = 0);
        }),
        (X.prototype.delete = function (t) {
            var r = this.__data__,
                e = nt(r, t);
            return !(e < 0) && (e == r.length - 1 ? r.pop() : N.call(r, e, 1), --this.size, !0);
        }),
        (X.prototype.get = function (t) {
            var r = this.__data__,
                e = nt(r, t);
            return e < 0 ? void 0 : r[e][1];
        }),
        (X.prototype.has = function (t) {
            return nt(this.__data__, t) > -1;
        }),
        (X.prototype.set = function (t, r) {
            var e = this.__data__,
                n = nt(e, t);
            return n < 0 ? (++this.size, e.push([t, r])) : (e[n][1] = r), this;
        }),
        (Y.prototype.clear = function () {
            (this.size = 0), (this.__data__ = { hash: new Q(), map: new (H || X)(), string: new Q() });
        }),
        (Y.prototype.delete = function (t) {
            var r = _t(this, t).delete(t);
            return (this.size -= r ? 1 : 0), r;
        }),
        (Y.prototype.get = function (t) {
            return _t(this, t).get(t);
        }),
        (Y.prototype.has = function (t) {
            return _t(this, t).has(t);
        }),
        (Y.prototype.set = function (t, r) {
            var e = _t(this, t),
                n = e.size;
            return e.set(t, r), (this.size += e.size == n ? 0 : 1), this;
        }),
        (Z.prototype.clear = function () {
            (this.__data__ = new X()), (this.size = 0);
        }),
        (Z.prototype.delete = function (t) {
            var r = this.__data__,
                e = r.delete(t);
            return (this.size = r.size), e;
        }),
        (Z.prototype.get = function (t) {
            return this.__data__.get(t);
        }),
        (Z.prototype.has = function (t) {
            return this.__data__.has(t);
        }),
        (Z.prototype.set = function (t, r) {
            var e = this.__data__;
            if (e instanceof X) {
                var n = e.__data__;
                if (!H || n.length < 199) return n.push([t, r]), (this.size = ++e.size), this;
                e = this.__data__ = new Y(n);
            }
            return e.set(t, r), (this.size = e.size), this;
        });
    var it,
        ut = function (t, r, e) {
            for (var n = -1, o = Object(t), i = e(t), u = i.length; u--; ) {
                var c = i[it ? u : ++n];
                if (!1 === r(o[c], c, o)) break;
            }
            return t;
        };
    function ct(t) {
        return null == t
            ? void 0 === t
                ? '[object Undefined]'
                : '[object Null]'
            : L && L in Object(t)
            ? (function (t) {
                  var r = F.call(t, L),
                      e = t[L];
                  try {
                      t[L] = void 0;
                      var n = !0;
                  } catch (t) {}
                  var o = S.call(t);
                  n && (r ? (t[L] = e) : delete t[L]);
                  return o;
              })(t)
            : (function (t) {
                  return S.call(t);
              })(t);
    }
    function at(t) {
        return Ct(t) && ct(t) == o;
    }
    function ft(t) {
        return (
            !(
                !xt(t) ||
                (function (t) {
                    return !!U && U in t;
                })(t)
            ) &&
            (zt(t) ? P : a).test(
                (function (t) {
                    if (null != t) {
                        try {
                            return C.call(t);
                        } catch (t) {}
                        try {
                            return t + '';
                        } catch (t) {}
                    }
                    return '';
                })(t)
            )
        );
    }
    function st(t) {
        if (!xt(t))
            return (function (t) {
                var r = [];
                if (null != t) for (var e in Object(t)) r.push(e);
                return r;
            })(t);
        var r = yt(t),
            e = [];
        for (var n in t) ('constructor' != n || (!r && F.call(t, n))) && e.push(n);
        return e;
    }
    function lt(t, r, e, n, o) {
        t !== r &&
            ut(
                r,
                function (i, u) {
                    if ((o || (o = new Z()), xt(i)))
                        !(function (t, r, e, n, o, i, u) {
                            var a = gt(t, e),
                                f = gt(r, e),
                                s = u.get(f);
                            if (s) return void rt(t, e, s);
                            var l = i ? i(a, f, e + '', t, r, u) : void 0,
                                h = void 0 === l;
                            if (h) {
                                var p = Ot(f),
                                    _ = !p && At(f),
                                    v = !p && !_ && Ft(f);
                                (l = f),
                                    p || _ || v
                                        ? Ot(a)
                                            ? (l = a)
                                            : Ct((j = a)) && mt(j)
                                            ? (l = (function (t, r) {
                                                  var e = -1,
                                                      n = t.length;
                                                  r || (r = Array(n));
                                                  for (; ++e < n; ) r[e] = t[e];
                                                  return r;
                                              })(a))
                                            : _
                                            ? ((h = !1),
                                              (l = (function (t, r) {
                                                  if (r) return t.slice();
                                                  var e = t.length,
                                                      n = $ ? $(e) : new t.constructor(e);
                                                  return t.copy(n), n;
                                              })(f, !0)))
                                            : v
                                            ? ((h = !1),
                                              (d = f),
                                              (y = !0
                                                  ? ((g = d.buffer),
                                                    (b = new g.constructor(g.byteLength)),
                                                    new E(b).set(new E(g)),
                                                    b)
                                                  : d.buffer),
                                              (l = new d.constructor(y, d.byteOffset, d.length)))
                                            : (l = [])
                                        : (function (t) {
                                              if (!Ct(t) || ct(t) != c) return !1;
                                              var r = D(t);
                                              if (null === r) return !0;
                                              var e = F.call(r, 'constructor') && r.constructor;
                                              return 'function' == typeof e && e instanceof e && C.call(e) == I;
                                          })(f) || wt(f)
                                        ? ((l = a),
                                          wt(a)
                                              ? (l = (function (t) {
                                                    return (function (t, r, e, n) {
                                                        var o = !e;
                                                        e || (e = {});
                                                        var i = -1,
                                                            u = r.length;
                                                        for (; ++i < u; ) {
                                                            var c = r[i],
                                                                a = n ? n(e[c], t[c], c, e, t) : void 0;
                                                            void 0 === a && (a = t[c]), o ? ot(e, c, a) : et(e, c, a);
                                                        }
                                                        return e;
                                                    })(t, Ut(t));
                                                })(a))
                                              : (xt(a) && !zt(a)) ||
                                                (l = (function (t) {
                                                    return 'function' != typeof t.constructor || yt(t) ? {} : K(D(t));
                                                })(f)))
                                        : (h = !1);
                            }
                            var d, y, g, b;
                            var j;
                            h && (u.set(f, l), o(l, f, n, i, u), u.delete(f));
                            rt(t, e, l);
                        })(t, r, u, e, lt, n, o);
                    else {
                        var a = n ? n(gt(t, u), i, u + '', t, r, o) : void 0;
                        void 0 === a && (a = i), rt(t, u, a);
                    }
                },
                Ut
            );
    }
    function ht(t, r) {
        return bt(
            (function (t, r, e) {
                return (
                    (r = V(void 0 === r ? t.length - 1 : r, 0)),
                    function () {
                        for (var n = arguments, o = -1, i = V(n.length - r, 0), u = Array(i); ++o < i; )
                            u[o] = n[r + o];
                        o = -1;
                        for (var c = Array(r + 1); ++o < r; ) c[o] = n[o];
                        return (c[r] = e(u)), j(t, this, c);
                    }
                );
            })(t, r, Pt),
            t + ''
        );
    }
    var pt = R
        ? function (t, r) {
              return R(t, 'toString', {
                  configurable: !0,
                  enumerable: !1,
                  value:
                      ((e = r),
                      function () {
                          return e;
                      }),
                  writable: !0,
              });
              var e;
          }
        : Pt;
    function _t(t, r) {
        var e,
            n,
            o = t.__data__;
        return (
            'string' == (n = typeof (e = r)) || 'number' == n || 'symbol' == n || 'boolean' == n
                ? '__proto__' !== e
                : null === e
        )
            ? o['string' == typeof r ? 'string' : 'hash']
            : o.map;
    }
    function vt(t, r) {
        var e = (function (t, r) {
            return null == t ? void 0 : t[r];
        })(t, r);
        return ft(e) ? e : void 0;
    }
    function dt(t, r) {
        var e = typeof t;
        return (
            !!(r = null == r ? n : r) &&
            ('number' == e || ('symbol' != e && f.test(t))) &&
            t > -1 &&
            t % 1 == 0 &&
            t < r
        );
    }
    function yt(t) {
        var r = t && t.constructor;
        return t === (('function' == typeof r && r.prototype) || M);
    }
    function gt(t, r) {
        if (('constructor' !== r || 'function' != typeof t[r]) && '__proto__' != r) return t[r];
    }
    var bt = (function (t) {
        var r = 0,
            e = 0;
        return function () {
            var n = W(),
                o = 16 - (n - e);
            if (((e = n), o > 0)) {
                if (++r >= 800) return arguments[0];
            } else r = 0;
            return t.apply(void 0, arguments);
        };
    })(pt);
    function jt(t, r) {
        return t === r || (t != t && r != r);
    }
    var wt = at(
            (function () {
                return arguments;
            })()
        )
            ? at
            : function (t) {
                  return Ct(t) && F.call(t, 'callee') && !B.call(t, 'callee');
              },
        Ot = Array.isArray;
    function mt(t) {
        return null != t && Mt(t.length) && !zt(t);
    }
    var At =
        G ||
        function () {
            return !1;
        };
    function zt(t) {
        if (!xt(t)) return !1;
        var r = ct(t);
        return r == u || '[object GeneratorFunction]' == r || '[object AsyncFunction]' == r || '[object Proxy]' == r;
    }
    function Mt(t) {
        return 'number' == typeof t && t > -1 && t % 1 == 0 && t <= n;
    }
    function xt(t) {
        var r = typeof t;
        return null != t && ('object' == r || 'function' == r);
    }
    function Ct(t) {
        return null != t && 'object' == typeof t;
    }
    var Ft = b
        ? (function (t) {
              return function (r) {
                  return t(r);
              };
          })(b)
        : function (t) {
              return Ct(t) && Mt(t.length) && !!s[ct(t)];
          };
    function Ut(t) {
        return mt(t) ? tt(t, !0) : st(t);
    }
    var St,
        It =
            ((St = function (t, r, e) {
                lt(t, r, e);
            }),
            ht(function (t, r) {
                var e = -1,
                    n = r.length,
                    o = n > 1 ? r[n - 1] : void 0,
                    i = n > 2 ? r[2] : void 0;
                for (
                    o = St.length > 3 && 'function' == typeof o ? (n--, o) : void 0,
                        i &&
                            (function (t, r, e) {
                                if (!xt(e)) return !1;
                                var n = typeof r;
                                return (
                                    !!('number' == n ? mt(e) && dt(r, e.length) : 'string' == n && (r in e)) &&
                                    jt(e[r], t)
                                );
                            })(r[0], r[1], i) &&
                            ((o = n < 3 ? void 0 : o), (n = 1)),
                        t = Object(t);
                    ++e < n;

                ) {
                    var u = r[e];
                    u && St(t, u, e, o);
                }
                return t;
            }));
    function Pt(t) {
        return t;
    }
    t.exports = It;
});
const c = Object.prototype.hasOwnProperty,
    a = (t, r) => c.call(t, r);
class f {
    constructor({ pluginId: t, defaultConfig: r = {}, customMerge: e, root: n }) {
        (this.pluginId = t),
            (this.defaultConfig = r),
            (this.pluginConfigPath = o.default.resolve(n || __dirname, t)),
            (this.customMerge = e),
            (this._config = void 0);
    }
    resolve(t) {
        return o.default.resolve(this.pluginConfigPath, t);
    }
    hasFile(t) {
        return n.default.existsSync(this.resolve(t));
    }
    requireFile(t) {
        try {
            return require(this.resolve(t));
        } catch (t) {
            if ('MODULE_NOT_FOUND' === t.code) return;
            throw t;
        }
    }
    _getUserConfig() {
        return this.requireFile('config.json');
    }
    config(t, r) {
        if (!this._config) {
            const t = this._getUserConfig();
            this._config = Array.isArray(t) ? t : (this.customMerge || u)(this.defaultConfig, t);
        }
        let e = this._config;
        return t
            ? (function (t, r, e) {
                  if ('number' == typeof r) return t[r];
                  if ('symbol' == typeof r) return a(t, r) ? t[r] : e;
                  const n =
                      'string' != typeof (o = r)
                          ? o
                          : o
                                .split('.')
                                .reduce((t, r) => (r.split(/\[([^}]+)\]/g).forEach((r) => r && t.push(r)), t), []);
                  var o;
                  let i = t;
                  for (let t = 0; t < n.length; t++) {
                      const r = n[t];
                      if (!a(i, r)) return e;
                      i = i[r];
                  }
                  return i;
              })(e, t, r)
            : e;
    }
}
const s = new (class {
    constructor() {
        this._configMap = new Map();
    }
    plugin({ pluginId: t, defaultConfig: r, customMerge: e, root: n = __dirname, cache: o = !0 }) {
        if (this._configMap.has(t) && o) return this._configMap.get(t);
        const i = new f({ pluginId: t, defaultConfig: r, customMerge: e, root: n });
        return o && this._configMap.set(t, i), i;
    }
})();
var l = s.plugin.bind(s);
module.exports = l;
